//package com.demo.code;
//
//import java.io.BufferedReader;
//import java.io.File;
//import java.io.FileReader;
//import java.io.IOException;
//
//public class StatisticCodeNum {
//
//
//    private static long blankLine = 0;
//    private static long explainLine = 0;
//    private static long codeLine = 0;
//    private static long totalLine = 0;
//
//    public static void main(String[] args) {
//        // 这里只统计 \src\main 文件夹里的文件，其他文件像 .idea、test 这些文件夹里的就不算进去了
//        circulateFileDiretory("D:\\Java\\workspace\\AssetsJava", "\\src\\main\\");
//        System.out.println("空行:" + blankLine);
//        System.out.println("注释行:" + explainLine);
//        System.out.println("代码行：" + codeLine);
//        System.out.println("总行：" + totalLine);
//    }
//
//    private static void circulateFileDiretory(String projectPath, String statisticFilePath) {
//        File f = new File(projectPath);
//        if (!f.exists()) {
//            System.out.println("项目路径不存在！");
//            return;
//        }
//        File[] childs = f.listFiles(); // 获取这个项目下的文件、文件夹
//        for (int i = 0; i < childs.length; i++) {
//            File child = childs[i];
//            if (!child.isDirectory()) { // 当前文件不是文件夹，就读取
//                if (child.getParent().contains(statisticFilePath)) { // java文件、xml文件、配置文件 只统计main文件夹下的
//                    if (child.getName().matches(".*\\.java$") || child.getName().endsWith(".yml") ||
//                            child.getName().endsWith(".properties") || child.getName().endsWith(".xml")) {
//                        long 单个文件代码行数 = statisticCodeLine(child);
//                        System.out.println(单个文件代码行数 + "\t\t" + child.getName());
//                    }
//                } else if ("pom.xml".equals(child.getName())) {
//                    long 单个文件代码行数 = statisticCodeLine(child);
//                    System.out.println(单个文件代码行数 + "\t\t" + child.getName());
//                }
//            } else { // 当前文件是文件夹，继续递归
//                circulateFileDiretory(child.getPath(), statisticFilePath);
//            }
//        }
//    }
//
//    private static long statisticCodeLine(File file) {
//        long singleFileCodeLine = 0;
//        BufferedReader br = null;
//        try {
//            br = new BufferedReader(new FileReader(file));
//            String line = "";
//            boolean flag = false; // 用于标记xml多行注释，为true表示当前行在多行注释中，一直到最后一行注释
//            while ((line = br.readLine()) != null) {
//                totalLine++;
//                String content = line.trim(); // 每一行的内容，去掉空格
//                if (flag) {
//                    explainLine++;
//                    // 当多行注释结尾是 --> 说明多行注释结束，重新标记为false，表示当前不在统计多行注释
//                    if (content.endsWith("-->")) flag = false;
//                } else {
//                    if (content.length() == 0) {
//                        blankLine++;
//                    } else if (content.startsWith("//") || content.startsWith("/**") || content.startsWith("*") ||
//                            content.startsWith("*/") || content.startsWith("/*") || content.startsWith("#")) {
//                        explainLine++;
//                    } else if (content.startsWith("<!--")) {
//                        explainLine++;
//                        // 当前行属于xml的注释，且结尾不是 --> 时，表示是多行注释，设置标记为true
//                        if (!content.endsWith("-->")) flag = true;
//                    } else {
//                        codeLine++;
//                        singleFileCodeLine++;
//                    }
//                }
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            try {
//                br.close();
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//        return singleFileCodeLine;
//    }
//
//
//}
